/**
 * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
 *
 * 示例 1:
 *
 * 输入: 123
 * 输出: 321
 *
 *  示例 2:
 *
 * 输入: -123
 * 输出: -321
 *
 * 示例 3:
 *
 * 输入: 120
 * 输出: 21
 *
 */

//MAX_VALUE = 2147483647
//MIN_VALUE = -2147483648
public class Solution_07 {
    public int reverse(int x) {
        //反转后的数
        int ans = 0;
        //通过死循环进行取余反转，并且每一步都进行溢出判断
        while (x != 0) {
            //取个位
            int pop = x % 10;
            //判断是否溢出，溢出则返回0
            if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE/10 && pop > 7)) {
                return 0;
            }
            if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE/10 && pop < -8)) {
                return 0;
            }
            //继续进行反转
            ans = ans*10 + pop;
            x /= 10;
        }
        //返回结果
        return ans;
    }
}
